﻿using System.Collections.Generic;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;

namespace Zarion_Quest.Base
{
    /// <summary>
    /// Classe para gerenciar os tiros de um objeto.
    /// Decidi não fazer esta classe como estática para cada objeto ser "dono" de seus tiros.
    /// </summary>
    class ShotManager
    {
        /// <summary>
        /// Lista dos tiros. Private para que a classe controladora(está) tenha total controle sobre os tiros, por segurança.
        /// </summary>
        private List<BaseShot> shotList;

        private ContentManager shotContentManager;
        public ContentManager ShotContentManager
        {
            get { return shotContentManager; }
        }

        public ShotManager()
        {
            // Realmente não sou muito fã desse static...
            shotContentManager = new ContentManager(Game1.Self.Services, Game1.Self.Content.RootDirectory);
            shotList = new List<BaseShot>();
        }

        public void addShot(BaseShot shot)
        {
            shotList.Add(shot);
        }

        public void removeShot(BaseShot shot)
        {
            shotList.Remove(shot);
        }

        public void clearShots()
        {
            shotContentManager.Unload();
            shotList.Clear();
        }

        public void UpdateShots(GameTime gameTime)
        {
            List<BaseShot> exclusionList = new List<BaseShot>();
            foreach (BaseShot shot in shotList)
            {
                if (shot.IsLive)
                    shot.Update(gameTime);
                else
                    exclusionList.Add(shot);
            }
            foreach (BaseShot shot in exclusionList)
            {
                shotList.Remove(shot);
            }
        }

        public void DrawShots(SpriteBatch spriteBatch)
        {
            foreach (BaseShot shot in shotList)
            {
                shot.Draw(spriteBatch);
            }
        }
    }
}
